package cn.cttic.app.service;

import cn.cttic.app.api.domain.bo.DoInstallActionBo;
import cn.cttic.app.api.domain.bo.InstallOrderQueryBo;
import cn.cttic.app.api.domain.vo.BaseInstallOrderProcessUploadVo;
import cn.cttic.app.api.domain.vo.InstallActiveResultVo;
import cn.cttic.app.api.domain.vo.InstallCheckResultVo;
import cn.cttic.app.api.domain.vo.InstallOrderPublicDetailVo;
import cn.cttic.common.mybatis.core.page.TableDataInfo;
import cn.cttic.order.api.domain.BaseInstallOrder;
import cn.cttic.order.api.domain.BaseSaleOrder;
import cn.cttic.order.api.domain.vo.BaseInstallOrderProcessVo;
import cn.cttic.order.api.domain.vo.BaseInstallOrderVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * Interface: d
 */
public interface IAppInstallService {

    BaseInstallOrderProcessVo BasedoInstallAction(MultipartFile file, DoInstallActionBo installActionBo);

    /**
     * 检查设备信息
     *
     * @param imeiCode IMEI 号码
     * @return 检查是否成功
     */
    boolean checkDevice(String imeiCode, BaseInstallOrder installOrder);

    /**
     * 绑定设备
     *
     * @param imeiCode IMEI 号码
     * @return 绑定是否成功
     */
    boolean bindDevice(String imeiCode, BaseInstallOrder installOrder);

    /**
     * 检查并绑定设备
     *
     * @param imeiCode IMEI 号码
     * @return 检查绑定是否成功
     */
    boolean checkAndBindDevice(String imeiCode, DoInstallActionBo installActionBo);

    /**
     * 检查并绑定设备
     *
     * @param imeiCode IMEI 号码
     * @return 检查绑定是否成功
     */
    boolean checkIfDeviceBinded(String orderId);

    /**
     * 上传行驶证主页
     *
     * @param files           行驶证副页图片列表
     * @param installActionBo 上传行驶证主页参数
     * @return
     */
    BaseInstallOrderProcessVo uploadVehicleLicenseMainPage(List<MultipartFile> files, DoInstallActionBo installActionBo);

    /**
     * 上传行驶证主页
     *
     * @param files           行驶证副页图片列表
     * @param installActionBo 上传行驶证主页参数
     * @return
     */
    BaseInstallOrderProcessUploadVo addVehicleLicenseMainPage(MultipartFile file, DoInstallActionBo installActionBo);

    /**
     * 上传行驶证主页
     *
     * @param files           行驶证副页图片列表
     * @param installActionBo 上传行驶证主页参数
     * @return
     */
    BaseInstallOrderProcessVo removeVehicleLicenseMainPage(String processId, String ossId, String ossUrl);


    /**
     * 上传行驶证副页
     *
     * @param files           行驶证副页图片列表
     * @param installActionBo 上传行驶证副页参数
     * @return
     */
    BaseInstallOrderProcessVo uploadVehicleLcenseSubPage(List<MultipartFile> files, DoInstallActionBo installActionBo);


    /**
     * 上传行驶证副页
     *
     * @param files           行驶证副页图片列表
     * @param installActionBo 上传行驶证副页参数
     * @return
     */
    BaseInstallOrderProcessUploadVo addVehicleLcenseSubPage(MultipartFile file, DoInstallActionBo installActionBo);


    /**
     * 上传行驶证副页
     *
     * @param files           行驶证副页图片列表
     * @param installActionBo 上传行驶证副页参数
     * @return
     */
    BaseInstallOrderProcessVo removeVehicleLcenseSubPage(String processId, String ossId, String ossUrl);

    /**
     * 上传车身照片
     *
     * @param file            车身照片
     * @param installActionBo 上传车身照参数
     * @return
     */
    BaseInstallOrderProcessUploadVo uploadCarPhotoForCarNo(MultipartFile file, DoInstallActionBo installActionBo);


    /**
     * 上传安装前接线处照片
     *
     * @param file            安装前接线处照片
     * @param installActionBo 上传安装前接线处照片参数
     * @return
     */
    BaseInstallOrderProcessUploadVo uploadBeforeInstallConnectionPointPhoto(MultipartFile file, DoInstallActionBo installActionBo);


    /**
     * 上传安装后接线处照片
     *
     * @param file            安装后接线处照片
     * @param installActionBo 上传安装后接线处照片参数
     * @return
     */
    BaseInstallOrderProcessUploadVo uploadAfterInstallConnectionPointPhoto(MultipartFile file, DoInstallActionBo installActionBo);


    /**
     * 上传安装位置照片
     *
     * @param file            安装位置照片
     * @param installActionBo 上传安装位置照片参数
     * @return
     */
    BaseInstallOrderProcessUploadVo uploadInstallPostionPhoto(MultipartFile file, DoInstallActionBo installActionBo);


    /**
     * 上传里程表照片
     *
     * @param file            里程表照片
     * @param installActionBo 上传里程表照片参数
     * @return
     */
    BaseInstallOrderProcessUploadVo uploadOdometerPhoto(MultipartFile file, DoInstallActionBo installActionBo);


    /**
     * 检查设备安装信息
     *
     * @param installActionBo 设备激活参数
     * @return
     */
    InstallCheckResultVo checkDeviceInstallInfo(DoInstallActionBo installActionBo);

    /**
     * 检查设备激活信息
     * @param installActionBo 设备激活参数
     * @return
     */
    InstallActiveResultVo checkDeviceActiveInfo(DoInstallActionBo installActionBo);


    /**
     * 创建安装单
     *
     * @param saleOrder 销售单
     * @return 安装单
     */
    BaseInstallOrder createInstallOrder(BaseSaleOrder saleOrder);


    BaseInstallOrderVo getInstallingOrder(String userId);


    List<BaseInstallOrderVo>  getInstallOrderByCarNo(String cardNo);


    List<BaseInstallOrderVo>  getInstallOrderByInstallCode(String installCode);

    TableDataInfo getInstallOrderPageList(InstallOrderQueryBo queryBo);

    BaseInstallOrderVo startInstall(String installOrderId, String userId);

    BaseInstallOrderVo submitInstall(String installOrderId, String userId);

    String baiduCarNoOcr(MultipartFile file);

    List<BaseInstallOrderProcessVo> getInstallOrderProcessList(String orderId);


    /**
     * 获取公开信息
     * @param jumpUrl 跳转地址
     * @return
     */
    InstallOrderPublicDetailVo getInstallOrderPublicDetail(String jumpUrl);

}
